package it.univaq.disim.mwt.business.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import it.univaq.disim.mwt.business.AlunniService;
import it.univaq.disim.mwt.business.ClassiService;
import it.univaq.disim.mwt.business.GenitoreService;
import it.univaq.disim.mwt.business.model.Alunno;
import it.univaq.disim.mwt.business.model.Classe;
import it.univaq.disim.mwt.business.model.DebitoFormativo;
import it.univaq.disim.mwt.business.model.Genitore;
import it.univaq.disim.mwt.business.model.Voto;

public class JDBCAlunnoService implements AlunniService{

	@Override
	public void visualizzaCalendarioLezioni() {
		
		
	}

	@Override
	public void visualizzaCarriera(Alunno alunno) {
		
		
	}

	@Override
	public List<Voto> visualizzaVoti(Alunno alunno) {
		
		
		
		return null;
		
	}

	@Override
	public List<DebitoFormativo> visualizzaDebitiFormativi(Alunno alunno) {
		
	
		return null;	
		
	}

	//FUNZIONA
	@Override
	public Alunno findAlunnoById(Long id) {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		String sql = "select * from alunni where id = ?";
		Alunno alunno = null;
		
		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setLong(1, id);
			resultSet = preparedStatement.executeQuery();			
			
			resultSet.next();
			
			Long ide=resultSet.getLong("id");
			String codiceFiscale=resultSet.getString("codice_fiscale");
			String nome=resultSet.getString("nome");
			String cognome=resultSet.getString("cognome");
			Date dataDiNascita=resultSet.getDate("data_nascita");
			String sesso=resultSet.getString("sesso");
			String cittaNascita=resultSet.getString("citta_nascita");
			String cittaResidenza=resultSet.getString("citta_residenza");
			String domicilio=resultSet.getString("domicilio");
			String indirizzo=resultSet.getString("indirizzo");
			String provincia=resultSet.getString("provincia");
			String cap=resultSet.getString("cap");
	        String telefono=resultSet.getString("telefono");
			String email=resultSet.getString("email");
			String password=resultSet.getString("password");
			Long idGenitore=resultSet.getLong("id_genitore");
			Date dataIscrizione=resultSet.getDate("data_iscrizione");
			Long idClasse=resultSet.getLong("id_classe");
			
			

			JDBCGenitoreService jdbcGenitoreService= new JDBCGenitoreService();
			Genitore genitore=jdbcGenitoreService.findGenitoreById(idGenitore);
			
			JDBCClasseService jdbcClasseService= new JDBCClasseService();
			Classe classe=jdbcClasseService.findClassiById(idClasse);
			
			alunno=new Alunno(ide,codiceFiscale, nome, cognome,dataDiNascita,
					sesso, cittaNascita, cittaResidenza,
					domicilio,indirizzo,provincia, cap, telefono,email,password,
					genitore, dataIscrizione,classe);
			
			resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return alunno;

		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		return null;
	}

	//FUNZIONA
	@Override
	public List<Alunno> findAllAlunni() {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		List<Alunno> listAlunni = new ArrayList<Alunno>();
		
		String sql = "select * from alunni ";
		Alunno alunno = null;
		
		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.executeQuery();	
			
			resultSet = preparedStatement.getResultSet();
			
			while(resultSet.next())
			{
				Long ide=resultSet.getLong("id");
				String codiceFiscale=resultSet.getString("codice_fiscale");
				String nome=resultSet.getString("nome");
				String cognome=resultSet.getString("cognome");
				Date dataDiNascita=resultSet.getDate("data_nascita");
				String sesso=resultSet.getString("sesso");
				String cittaNascita=resultSet.getString("citta_nascita");
				String cittaResidenza=resultSet.getString("citta_residenza");
				String domicilio=resultSet.getString("domicilio");
				String indirizzo=resultSet.getString("indirizzo");
				String provincia=resultSet.getString("provincia");
				String cap=resultSet.getString("cap");
		        String telefono=resultSet.getString("telefono");
				String email=resultSet.getString("email");
				String password=resultSet.getString("password");
				Long idGenitore=resultSet.getLong("id_genitore");
				Date dataIscrizione=resultSet.getDate("data_iscrizione");
				Long idClasse=resultSet.getLong("id_classe");
				
				

				JDBCGenitoreService jdbcGenitoreService= new JDBCGenitoreService();
				Genitore genitore=jdbcGenitoreService.findGenitoreById(idGenitore);
				
				JDBCClasseService jdbcClasseService= new JDBCClasseService();
				Classe classe=jdbcClasseService.findClassiById(idClasse);
				
				alunno=new Alunno(ide,codiceFiscale, nome, cognome,dataDiNascita,
						sesso, cittaNascita, cittaResidenza,
						domicilio,indirizzo,provincia, cap, telefono,email,password,
						genitore, dataIscrizione,classe);
				
				listAlunni.add(alunno);
				
			}
			
			resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return listAlunni;

		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		return null;
	}

	//FUNZIONA
	@Override
	public List<Alunno> findAllAlunnibyIdClasse(long idClasse) {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		List<Alunno> listAlunni = new ArrayList<Alunno>();
		String sql = "select * from alunni where id_classe = ?";
		
		Alunno alunno = null;
		
		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setLong(1, idClasse);
			preparedStatement.executeUpdate();	
			
			resultSet = preparedStatement.getResultSet();
			
			while(resultSet.next())
			{
				Long ide=resultSet.getLong("id");
				String codiceFiscale=resultSet.getString("codice_fiscale");
				String nome=resultSet.getString("nome");
				String cognome=resultSet.getString("cognome");
				Date dataDiNascita=resultSet.getDate("data_nascita");
				String sesso=resultSet.getString("sesso");
				String cittaNascita=resultSet.getString("citta_nascita");
				String cittaResidenza=resultSet.getString("citta_residenza");
				String domicilio=resultSet.getString("domicilio");
				String indirizzo=resultSet.getString("indirizzo");
				String provincia=resultSet.getString("provincia");
				String cap=resultSet.getString("cap");
		        String telefono=resultSet.getString("telefono");
				String email=resultSet.getString("email");
				String password=resultSet.getString("password");
				Long idGenitore=resultSet.getLong("id_genitore");
				Date dataIscrizione=resultSet.getDate("data_iscrizione");
				Long idClass=resultSet.getLong("id_classe");
				
				

				JDBCGenitoreService jdbcGenitoreService= new JDBCGenitoreService();
				Genitore genitore=jdbcGenitoreService.findGenitoreById(idGenitore);
				
				JDBCClasseService jdbcClasseService= new JDBCClasseService();
				Classe classe=jdbcClasseService.findClassiById(idClass);
				
				alunno=new Alunno(ide,codiceFiscale, nome, cognome,dataDiNascita,
						sesso, cittaNascita, cittaResidenza,
						domicilio,indirizzo,provincia, cap, telefono,email,password,
						genitore, dataIscrizione,classe);
				
				listAlunni.add(alunno);
				
			}
			resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return listAlunni;

		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}

}